import urllib.request as ulr
import re
import urllib as ul
import chardet as cd
import time
import uuid

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'}


# 获得每一页的图片的url地址可以进入新的一页
def getUrl(urllist):
    return urllist


# 展示下载的进度
def cbk(a, b, c):
    '''''回调函数
    @a:已经下载的数据块
    @b:数据块的大小
    @c:远程文件的大小
    '''
    per = 100.0 * a * b / c
    if per > 100:
        per = 100
    print("下载进度为=======================" + '%.2f%%' % per)


# 根据传入的url爬取该页面的所有内容
def getHtml(firstUrl):
    print("请求页面数据开始==========")
    try:
        request = ulr.Request(firstUrl, headers=headers)
        html = ulr.urlopen(firstUrl)
        result = html.read()
        print("拿到页面数据==========")
    except ul.error.HTTPError as e:
        if hasattr(e, 'reason'):
            print('错误原因是' + str(e.reason))
    except ul.error.URLError as e:
        if hasattr(e, 'code'):
            print('错误状态吗是' + str(e.code))
    else:
        print('请求成功！')
    print("请求页面数据结束==========")
    return result


def getImage(content):
    print("开始下载图片")
    # reg = 'class="(.+?)" data-original="(http:.+?\.jpg\_.+?)" '
    # reg = 'data-original="(http:.+?\.jpg\_.+?)" '
    reg = 'src="(http:.+?\.jpg)" '
    cp = re.compile(reg)
    urls = re.findall(reg, content)
    x = 0
    for img in urls:
        ctime = str(uuid.uuid1())
        print(img)
        # pic_name = img[1]
        # name = pic_name[10:20]

        ulr.urlretrieve(img, './images/'+ctime+'.jpg', cbk)
        x += 1
    return urls
    print('图片下载完成')


if __name__ == '__main__':
    htmlContent = getHtml("http://59pic.92demo.com/")
    encode_type = cd.detect(htmlContent)
    result = htmlContent.decode(encode_type['encoding'])  # 进行相应解码，赋给原标识符（变量）
    getImage(result)

    reg1 = ' href="(http:.+?)"'
    re.compile(reg1)
    hrefs = re.findall(reg1, result)
    for href in hrefs:
        print(href)
        htmlContent = getHtml(href)
        encode_type = cd.detect(htmlContent)
        result = htmlContent.decode(encode_type['encoding'])  # 进行相应解码，赋给原标识符（变量）
        getImage(result)
